layui.define(['layer'], function(exports){
  var layer = layui.layer;

  var utils = {
    /**
     * 下载文件
     * @param url
     */
    download: function(url){
      var iframe = document.createElement('iframe');
      iframe.style.display = 'none';
      iframe.src = url;
      document.body.appendChild(iframe);
    },
    /**
     * 主要用于对ECharts视图自动适应宽度
     */
    echartsResize: function(element){
      element = element || [];
      window.addEventListener("resize", function(){
        for(let i = 0; i < element.length; i++){
          element[i].resize();
        }
      });
    },
    getBodyWidth: function(){
      return document.body.scrollWidth;//body的总宽度
    },
    /**
     * 获取enum的值列表, 用于搜索
     * @param url enum的全类陷定名
     * @returns {*}
     */
    getEnumType: function(url){
      var result;
      utils.get(url, {}, {async: false}).done(function(res){
        result = res.data;
      });
      return result;
    },
    /**
     * 获取字典表的值列表
     * @param module
     * @param properties 额外配置
     */
    getDictList: function(module, properties){
      var result = [];
      utils.get(API.DICT.ALL, {'search.module_eq': module}, {async: false}).done(function(res){
        layui.each(res.data, function(index, item){
          result.push({value: item.text, key: item.id})
        });
      });
      return result;
    },
    /**
     * 获取url参数
     */
    getQueryVariable: function(name){
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); // 匹配目标参数
      var result = window.location.search.substr(1).match(reg); // 对querystring匹配目标参数
      if(result != null) return decodeURIComponent(result[2]);
      return '';
    },
    /**
     * 获取动态参数
     */
    getDynamicParam: function(url){
      var reg = new RegExp("({d.[^&]*})", "g");
      var result = url.match(reg);
      return result != null ? result : [];
    },
    /**
     * 获取当前主机端口号地址
     */
    getHostPath: function(){
      var curWwwPath = window.document.location.href
        , pathName = window.document.location.pathname
        , pos = curWwwPath.indexOf(pathName)
      return curWwwPath.substring(0, pos);
    },
    /**
     * 加载等待层
     */
    load: function(type){
      type = type || 0;
      return layer.load(type, {shade: [0.3, '#333']});
    },
    addUrlParam: function(url, key, value){
      if(url.indexOf('?') > 0){
        url += '&' + key + '=' + value;
      }else{
        url += '?' + key + '=' + value;
      }
      return url;
    },
    /**
     * 获取父窗体的okTab
     * @returns {string}
     */
    getOkTab: function(){
      return parent.objOkTab;
    },
    closeWindow: function(){
      if(navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Chrome") != -1){
        window.location.href = "about:blank";
        window.close();
      }else{
        window.opener = null;
        window.open("", "_self");
        window.close();
      }
    },
    array: {
      /**
       * 查找数组中的元素
       * @param arr 要查找的数组
       * @param key 查找元素的键
       * @param value 查找元素的值，若不传，则值为key
       */
      indexOf: function(arr, key, value){
        for(var i = 0; i < arr.length; i++){
          var data = arr[i];
          if((value && data[key] === value) || data === key){
            return i;
          }
        }
        return -1;
      }
    },
    number: {
      /**
       * 判断是否为一个正常的数字
       * @param num
       */
      isNumber: function(num){
        return !!(num && !isNaN(num));
      },
      /**
       * 判断一个数字是否包括在某个范围
       * @param num
       * @param begin
       * @param end
       */
      isNumberWith: function(num, begin, end){
        if(this.isNumber(num)){
          return num >= begin && num <= end;
        }
      },
    }
  };
  exports("ksUtil", utils);
});

